//
//  HKMeViewController.m
//  BaiSiBuDeJie
//
//  Created by 胡锦涛 on 2018/11/29.
//  Copyright © 2018 胡锦涛. All rights reserved.
// 搭建基本结构 -> 设置底部条 -> 设置顶部条 -> 设置顶部条标题字体->处理导航控制器的业务逻辑

#import "HKMeViewController.h"
#import "HKSettingViewController.h"
#import "HKSquareCell.h"
#import "HKSquareItem.h"
#import <SafariServices/SafariServices.h>
#import "XBWebViewController.h"
/*
 搭建基本结构 -> 设置底部条 -> 设置顶部条 -> 设置顶部条标题字体 -> 处理导航控制器业务逻辑(跳转)
 */
//StoryBoard 使用
//1.创建同名storyBoard
//2.连线-选中-(Is Initial View Controller)
static NSString * const ID = @"cell";
static NSInteger const cols = 4;
static CGFloat const margin = 1;
#define itemWH (SCREEN_WIDTH - (cols - 1) * margin) / cols
@interface HKMeViewController ()<UICollectionViewDataSource,UICollectionViewDelegate,SFSafariViewControllerDelegate>
@property (nonatomic, strong) NSMutableArray *squareItems;
/** 列表 */
@property (nonatomic, strong) UICollectionView * collectionView ;
@end

@implementation HKMeViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //设置导航条
    [self setupNavBar];
    
    //设置tableView的底部视图
    [self setupFooterView];
    
    // 展示方块内容 -> 请求数据(查看接口文档)
    [self loadData];
    
    /*
     跳转细节:
     1.collectionView高度重新计算 =>  collectionView高度需要根据内容去计算 => 有数据了 需要在计算下高度
     2.collectionView不需要滚动
     */
    // 处理cell 间距，默认tableView分组样式，有额外头部和尾部间距
    self.tableView.sectionHeaderHeight = 0;
    self.tableView.sectionFooterHeight = 10;
    
    //49-64
    self.tableView.contentInset = UIEdgeInsetsMake(-25, 0, 0, 0);
}

// 打印celly值
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    NSLog(@"%@",NSStringFromCGRect(cell.frame));
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    NSLog(@"%@",NSStringFromUIEdgeInsets(self.tableView.contentInset));
}

- (void)loadData {
    NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
    parameters[@"a"] = @"square";
    parameters[@"c"] = @"topic";
    HKWeakSelf
    [[HKNetService sharedInstance] sendGETWithUrl:@"http://api.budejie.com/api/api_open.php" params:parameters success:^(HKURLResponse *response, HKResultMessage *resultMessage) {
        
        HKStrongSelf
        NSArray *dictArr = response.responseData[@"square_list"];
        
        // 字典数组转换成模型数组
        /*
         iOS 空数组的处理
         在iOS开发过程中，避免不了要对请求数据进行非空判断，我们做空值判断的很大一部分原因就是为了在后台接口数据返回一些异常数据的时候，程序能保证稳定性。
         举个例子：某些情况下，后台可能由于各种原因，对某个字段返回了null值，这时我们取到的就是[NSNull null]这样一个对象，再比如说，后台可能对某一个数据取值，但取到了0个，这时返回的是一个空组，我们取到的就是@[]，空组。
         因此判断数组是否为空，需要对各种情况都进行判断。
         if (![array isKindOfClass:[NSNull class]] && array.count > 0 && array != nil) {
         
         }
         //这样就确保了数组不是nil对象，也不是NSNull对象，并且至少有一个元素的。
         if (array != nil && ![array isKindOfClass:[NSNull class]] && array.count != 0)
         //数据源数组中包含空数组，怎么移除？(否则将Crash)
         if ([self.dataArray containsObject:@[]]) {
             [self.dataArray removeObject:@[]];
         }
         */
        self.squareItems = [HKSquareItem mj_objectArrayWithKeyValuesArray:dictArr];
        if ([self.squareItems containsObject:@[]]) {
            [self.squareItems removeObject:@[]];
        }
        // 处理数据
        [self resloveData];
        
        //计算collectionView高度 = rows * itemWH
        //Rows = (count - 1) / cols + 1
        NSInteger count = self.squareItems.count;
        NSInteger rows = (count - 1) / cols + 1;
        // 设置collectioView高度
        self.collectionView.height = rows * itemWH;
        
        self.tableView.tableFooterView = self.collectionView;
        
        // 设置tableView滚动范围:自己计算
        //self.tableView.contentSize = CGSizeMake(0, CGRectGetMaxY(self.collectionView.frame));
        // 刷新表格
        [self.collectionView reloadData];
        
    } failure:^(HKURLResponse *response, HKResultMessage *resultMessage) {
        
    }];
}

#pragma mark - 处理请求完成数据
- (void)resloveData
{
    // 判断下缺几个
    // 3 % 4 = 3 cols - 3 = 1
    // 5 % 4 = 1 cols - 1 = 3
    NSInteger count = self.squareItems.count;
    NSInteger exter = count % cols;
    if (exter) {
        exter = cols - exter;
        for (int i = 0; i < exter; i++) {
            HKSquareItem *item = [[HKSquareItem alloc] init];
            [self.squareItems addObject:item];
        }
    }
    if ([self.squareItems containsObject:@[]]) {
        [self.squareItems removeObject:@[]];
    }
}

#pragma mark - 设置tableView底部视图
- (void)setupFooterView {
    /*
     1.初始化要设置流水布局
     2.cell必须要注册
     3.cell必须自定义
     */
    // 创建布局
    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
    // 设置cell尺寸

    layout.itemSize = CGSizeMake(itemWH, itemWH);
    layout.minimumInteritemSpacing = margin;
    layout.minimumLineSpacing = margin;

    // 创建UICollectionView
    UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, 0, 300) collectionViewLayout:layout];
    _collectionView = collectionView;
    collectionView.backgroundColor = self.tableView.backgroundColor;
    self.tableView.tableFooterView = collectionView;
    collectionView.dataSource = self;
    collectionView.delegate = self;
    collectionView.scrollEnabled = NO;
    // 注册cell
    [collectionView registerNib:[UINib nibWithNibName:@"HKSquareCell" bundle:nil] forCellWithReuseIdentifier:ID];
    //[collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:ID];
}
#pragma mark - UICollectionViewDelegate
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    // 跳转界面 push 展示网页
    /*
     1.Safari openURL :自带很多功能(进度条,刷新,前进,倒退等等功能),必须要跳出当前应用
     2.UIWebView (没有功能) ,在当前应用打开网页,并且有safari,自己实现,UIWebView不能实现进度条
     3.SFSafariViewController:专门用来展示网页 需求:即想要在当前应用展示网页,又想要safari功能 iOS9才能使用
     3.1 导入#import <SafariServices/SafariServices.h>
     4.WKWebView:iOS8 (UIWebView升级版本,添加功能 1.监听进度 2.缓存)
     4.1 导入#import <WebKit/WebKit.h>
     */
    // 创建网页控制器
    HKSquareItem *item = self.squareItems[indexPath.row];
    if (![item.url containsString:@"http"]) return;
    NSURL *url = [NSURL URLWithString:item.url];
    XBWebViewController *webVc = [[XBWebViewController alloc] init];
    webVc.url = url;
    [self.navigationController pushViewController:webVc animated:YES];
    // SFSafariViewController使用Modal
    SFSafariViewController *safariVc = [[SFSafariViewController alloc] initWithURL:url];
    //safariVc.delegate = self;
    //self.navigationController.navigationBarHidden = YES;
    //[self.navigationController pushViewController:safariVc animated:YES];
    [self presentViewController:safariVc animated:YES completion:nil];
    
    
}
#pragma mark - SFSafariViewControllerDelegate
- (void)safariViewControllerDidFinish:(SFSafariViewController *)controller
{
    [self.navigationController popViewControllerAnimated:YES];
}
#pragma mark - UICollectionViewDataSource
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return self.squareItems.count;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    // 从缓存池取
    HKSquareCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:ID forIndexPath:indexPath];
    cell.backgroundColor = kWhiteColor;
    HKSquareItem * item = self.squareItems[indexPath.row];
    cell.item = item;
    return cell;
}
- (void)setupNavBar
{
    // 左边按钮
    // 把UIButton包装成UIBarButtonItem.就会使按钮点击区域扩大
    // 设置
    UIBarButtonItem *settingItem =  [UIBarButtonItem itemWithimage:[UIImage imageNamed:@"mine-setting-icon"] highImage:[UIImage imageNamed:@"mine-setting-icon-click"] target:self action:@selector(setting)];
    // 夜间模型
    UIBarButtonItem *nightItem =  [UIBarButtonItem itemWithimage:[UIImage imageNamed:@"mine-moon-icon"] selImage:[UIImage imageNamed:@"mine-moon-icon-click"] target:self action:@selector(night:)];
    self.navigationItem.rightBarButtonItems = @[settingItem,nightItem];
    // titleView
    self.navigationItem.title = @"我的";
    
}

- (void)night:(UIButton *)button
{
    button.selected = !button.selected;
    
}

#pragma mark - 点击设置就会调用
- (void)setting
{
    HKSettingViewController * settingVC = [HKSettingViewController new];
    [self.navigationController pushViewController:settingVC animated:YES];
}



@end
